Skip to main content

JSON.parse 数值精度丢失问题

问题描述

在使用sse返回的数据时候,使用JSON.parse方法转义后,JSON内部long类型的数据会丢失精度。

1. 问题原因

JSON.parse 方法在解析 JSON 字符串时,会根据 JSON 字符串中的数据类型,将数据转换为 JavaScript 对应的数据类型。 但是,JSON.parse 方法无法处理 JavaScript 的浮点数精度问题,当 JSON 字符串中的数值超过 JavaScript 的浮点数精度范围时,JSON.parse 方法会将该数值转换为 JavaScript 的 Number 类型,而 JavaScript 的 Number 类型无法精确表示浮点数,因此会导致数值精度丢失。

当然如果普通接口返回的JSON 数据中有 long 类型的数据也会导致精度丢失,例如 数值型ID之类的

原因归类为js对于数值精度处理问题

2. 解决方案

  1. 由后端将对应long值转成string类型,再返回给前端(推荐)
  2. 前端使用某些parse三方库对json进行转义。
  3. 对于普通接口返回的JSON 数据中有 long 类型的数据,可能无法进行转义处理,因为在前端接收到的时候,该精度可能已经丢失(解决方案参考方案1)